﻿using Bot.Application.Dto;
using System;
using System.Collections.Generic;
using System.Text;

namespace Bot.Application.Services
{
    public interface IIntentAppService
    {
        IntentDto Get(Guid id, string include = "");

        IEnumerable<IntentDto> GetList(Guid botId, string include, Guid? categoryId, string keyword);

        IntentDto Add(Guid botId, IntentCreateDto dto);

        IntentDto Update(Guid id, IntentUpdateDto dto);

        void Delete(Guid id);
        /// <summary>
        /// 导入
        /// </summary>
        /// <param name="botId"></param>
        /// <param name="filePath"></param>
        /// <returns></returns>
        OperationDto Import(Guid botId, string filePath);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="botId"></param>
        /// <param name="question"></param>
        /// <param name="top"></param>
        /// <returns></returns>
        List<IntentScoreDto> QueryTopScore(Guid botId, string question, int top = 10);
        /// <summary>
        /// query intent
        /// </summary>
        /// <param name="sessionId"></param>
        /// <param name="detectIntentRequestBodyDto"></param>
        /// <returns></returns>
        DetectIntentResponseDto DetectIntent(Guid sessionId, DetectIntentRequestBodyDto detectIntentRequestBodyDto);
        /// <summary>
        /// goto intent
        /// </summary>
        /// <param name="sessionId"></param>
        /// <param name="triggerAnIntentRequestBodyDto"></param>
        /// <returns></returns>
        TriggerAnIntentResponseDto TriggerAnIntent(Guid sessionId, TriggerAnIntentRequestBodyDto triggerAnIntentRequestBodyDto);
        /// <summary>
        /// via form
        /// </summary>
        /// <param name="sessionId"></param>
        /// <param name="submitFormRequestBodyDto"></param>
        /// <returns></returns>
        HighConfidenceAnswerDto SubmitForm(Guid sessionId, SubmitFormRequestBodyDto submitFormRequestBodyDto);
        /// <summary>
        /// authentication
        /// </summary>
        /// <param name="sessionId"></param>
        /// <param name="submitAuthenticationRequestBodyDto"></param>
        /// <returns></returns>
        HighConfidenceAnswerDto SubmitAuthentication(Guid sessionId, SubmitAuthenticationRequestBodyDto submitAuthenticationRequestBodyDto);
        /// <summary>
        /// share location
        /// </summary>
        /// <param name="sessionId"></param>
        /// <param name="submitLocationRequestBodyDto"></param>
        /// <returns></returns>
        HighConfidenceAnswerDto SubmitLocation(Guid sessionId, SubmitLocationRequestBodyDto submitLocationRequestBodyDto);
        /// <summary>
        /// rate
        /// </summary>
        /// <param name="sessionId"></param>
        /// <param name="rateRequestBodyDto"></param>
        /// <returns></returns>
        NotHelpfulAnswerDto Rate(Guid sessionId, RateRequestBodyDto rateRequestBodyDto);
    }
}